package com.cs.framework.web.handler;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.context.ApplicationContext;

import com.cs.framework.core.context.Application;
import com.cs.framework.web.handler.support.ActionHandler;
import com.cs.framework.web.handler.support.ResourceHandler;

/**
 * 针对处理器的管理
 * 
 * @author hedongzhou
 * 
 */
public class HandlerManager {

	/**
	 * 默认的处理器
	 */
	public Handler[] defaultHandler = new Handler[] { new ActionHandler(), // Action处理器
			new ResourceHandler() // 资源处理器
	};

	/**
	 * 创建处理器
	 * 
	 * @param application
	 * @return
	 */
	public List<Handler> createHandler(Application application) {
		List<Handler> handlerList = new ArrayList<Handler>();

		Map<String, Handler> handlerMap = new HashMap<String, Handler>();

		// 添加默认的处理器
		for (Handler handler : defaultHandler) {
			handlerMap.put(handler.getClass().getName(), handler);
		}

		// 添加自定义的处理器
		Map<String, Handler> tempMap = BeanFactoryUtils.beansOfTypeIncludingAncestors((ApplicationContext) application,
				Handler.class);
		if (!tempMap.isEmpty()) {
			// 如果自定义的处理器名称与默认的处理器一样，则覆盖后者
			handlerMap.putAll(tempMap);
		}

		handlerList.addAll(handlerMap.values());

		// 初始化处理器
		for (Handler handler : handlerList) {
			handler.init(application);
		}

		return handlerList;
	}

}
